

#ifndef DOUBLYLINKEDLIST_H
#define DOUBLYLINKEDLIST_H

///双向链表节点结构体
typedef struct DoublyNode{
    int data;
    struct DoublyNode *next;
    struct DoublyNode *prev;
}DoublyNode;

///链表结构体
typedef struct LinkDouble{
    int size;
    DoublyNode *head;
    DoublyNode *tail;
}LinkDouble;

///创建链表

LinkDouble  creatLinkDouble();

///链表头部添加元素
///\param list 链表实例
///\param data 添加的元素
void addToHead(LinkDouble *list,int data);


/// 链表尾部添加元素
/// \param list 链表实例
/// \param data 添加的元素
void addToTail(LinkDouble *list,int data);


/// 从链表中删除元素
/// \param list 链表实例
/// \param data 要删除的元素
void remove_Element(LinkDouble *list,int data);


/// 获取链表中的元素
/// \param list 链表实例
/// \param data 要获取的元素的值
/// \return
DoublyNode * findData(LinkDouble *list, int data);
/// 打印链表中的元素
/// \param list 链表实例
void printDouble(LinkDouble *list);
/// 销毁链表
/// \param list 链表实例
void destroyDoubleList(LinkDouble *list);


///修改链表元素
/// \param list 链表实例
/// \param originalElement 要修改的元素
/// \param newElement 新元素
void changeDoubleList(LinkDouble *list,int originalElement, int newElement);

void destoryDoubleNode(LinkDouble *list);

#endif
